﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	ConverterCompositionChimique.cs
  -- Objet			  :	Converter pour afficher les mins et maxs pour les coulées
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using ModelEntities.Adapter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace ReprisePV.Converter
{
    /// <summary>
    /// Converter pour afficher les mins et maxs pour les coulées
    /// </summary>
    public class ConverterCompositionChimique : IValueConverter
    {
        /// <summary>
        /// PV affiché à l'écran
        /// </summary>
        private MEntetePV PVConverter;

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            MEntetePV pv = value as MEntetePV;
            String valueCut = String.Empty;

            if (pv != null)
            {
                PVConverter = pv;
                string[] data = System.Convert.ToString(parameter).Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                MDetailsPV detailPV = pv.DetailsPV.FirstOrDefault<MDetailsPV>(detail => detail.CodeInstruction.Equals(System.Convert.ToString(data[0])));//&& detail.NoPage.Equals("1")
                valueCut = detailPV == null ? String.Empty : detailPV.LibelleInstruction.Split(new string[] { ";" }, StringSplitOptions.None)[System.Convert.ToInt32(data[1])];
            }

            return valueCut.Trim();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            String returnValue = String.Empty;

            if (PVConverter != null)
            {
                string[] data = System.Convert.ToString(parameter).Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                MDetailsPV detailPV = PVConverter.DetailsPV.FirstOrDefault<MDetailsPV>(detail => detail.CodeInstruction.Equals(System.Convert.ToString(data[0])) && detail.NoPage.Equals("1"));
                if (detailPV != null)
                {
                    detailPV.LibelleInstruction = Complete(detailPV.LibelleInstruction, value, System.Convert.ToInt32(data[1]), System.Convert.ToInt32(data[2]));
                    returnValue = detailPV.LibelleInstruction;
                }
            }

            return returnValue;
        }

        private string Complete(string oldValue, object value, int position, int size)
        {
            StringBuilder sb = new StringBuilder();
            String tmp;
            String[] tab = oldValue.Split(new string[] { ";" }, StringSplitOptions.None);
            tab[position] = System.Convert.ToString(value);

            foreach (String s in tab)
            {
                if (s.Length > size)
                    tmp = s.Substring(0, size);
                else
                    tmp = s.PadLeft(size, ' ');

                sb.Append(tmp).Append(";");
            }
            return sb.ToString();
        }
    }
}
